home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / files / articulo.t07 < prev    next >
Encoding:
Text File  |  1996-11-14  |  5.8 KB  |  109 lines

  1. εProgramación\OOP\C++\num_4π
  2.  
  3.      εLos primeros ejerciciosπ
  4.  
  5.   En este número no veremos cosas nuevas, nos limitaremos a asentar lo
  6. aprendido en anteriores entregas. Por ello teneis en el direcctorio "δOOPπ"
  7. todos los fuentes que comentaré más adelante.
  8.   Trataremos de hacer un pequeño programa en C++ que sirva para hacer juegos
  9. de δROLπ conversacionales (al estilo MUD, sin gráficos ni complicaciones). Lo
  10. que haremos, será un juego en principio que, número tras número, le hiremos
  11. añadiendo cosas para acabar teniendo un kernel para diseñar juegos
  12. conversacionales.
  13.   Comenzaremos este proyecto como cualquier otro, es decir, escribiendo en
  14. lápiz y papel lo que queremos hacer, como lo vamos ha hacer, etc. Esto no lo
  15. haré yo aquí, pero es recomendable que lo hagais vosotros para ver lo que
  16. hace falta (ya os lo mostraré cuando llegué el número de las notaciones
  17. orientadas a objetos, técnica Bosch, etc).
  18.  
  19. ε     El juegoπ
  20.  
  21.   El objetivo serà crear un programa (juego) interactivo con el usuario que
  22. acepte unos cuantos comandos (por ahora no muchos) y cuya base parezca lo que
  23. acostrumbramos a llamar juego conversacional. Estan claros algunos de los
  24. elementos que contendrá: mostruos, objetos, armas, habitaciones, etc.
  25.   En esta primera toma de contacto, nos conformaremos con poder definir unos
  26. cuantos objetos y habitaciones, más adelante iremos ampliando el juego y
  27. con ello descubriremos la potencia de C++ a la hora de reutilizar el código.
  28. Por ejemplo, definiremos un objeto, pero un arma no es más que otro objeto,
  29. así que la heredaremos y nos ahorraremos escribir mucho código.
  30.   En el directorio 'δOOPπ' encontrareis 3 ficheros ∞.CPPπ y otros 2 ∞.HPPπ, que son
  31. todos los que tiene el juego por ahora. Los ficheros δ.HPPπ son definiciones de
  32. clase, en concreto, de las clases "δobjetoπ" y "δroomπ". Los δ.CPPπ son las
  33. implementaciones de dichas clases.
  34.  
  35. ε     La clase 'objeto'π
  36.  
  37.   En la própia definición de la clase podemos ver algunos rasgos
  38. característicos de δC++π. Por ejemplo, cuando incluimos en nuestros programas
  39. δC++π ficheros que provenian de C (como en este caso "δstdio.hπ") tenemos que
  40. hacerlo preponiendo la palabra clave "Γexternπ". Otra característica, común a
  41. todos los lenguajes POO, es que las variables de cada clase estan en la parte
  42. privada, mientras las funciones lo estan en la pública o privada
  43. indiferentemente. No es que no se pueda, sino que no se debe por varias cosas
  44. que ya hemos comentado en anteriores números.
  45.   Tenemos una cosita interesante en la definición de las funciones: la función
  46. "Γes_nombre()π", aunque no lo parezca, es una función 'Ωinlineπ'. Digo que no lo
  47. parece, más que nada, porque no lleva la palabra reservada 'Ωinlineπ' delante,
  48. pero la verdad es que todas las funciones que se implementan en la própia
  49. definición de la clase, son por defecto funciones "Ωen líneaπ".
  50.   Ya en la implementación de la clase 'Γobjetoπ', podemos ver la inclusión del
  51. fichero de definición, cosa que debemos hacer siempre ya que si no el
  52. compilador no sabe donde estan definidas las funciones que estamos
  53. implementando. Todas las funciones son muy sencillas en sí, pero cabe destacar
  54. la función "Γes_un()π" que indica si la cadena de caràcteres que se le pasa es
  55. igual al nombre del objeto.
  56.  
  57. ε     La clase 'room'π
  58.  
  59.   Esta clase define las habitaciones; contiene una descripción, punteros a
  60. las habitaciones a las que puede acceder (norte, este, sur y oeste) y un
  61. array con los objetos que hay en la própia habitación. Tambien se definen unas
  62. costantes que se usaran en las llamadas a funciones para indicar movimientos
  63. entre habitaciones.
  64.   En la implementación podemos ver las funciones implementadas. La función
  65. "Γdescribe()π", a parte de escribir la descripción de la habitación, escribe
  66. todos los objetos que se ven. Las funciones "Γcoge_obj()π" y "Γdeja_obj()π" lo
  67. que hacen es eso, coger y dejar objetos en la habitación, devolviendo en el
  68. primer caso un puntero a un 'objeto' si existe ese objeto en la sala, y en el
  69. segundo caso introduciendo el objeto en el array de la habitación.
  70.  
  71. ε     El módulo principalπ
  72.  
  73.   Como todavia no hemos hecho más que comenzar, las habitaciones y objetos
  74. estan definidos en el própio programa principal. Como podeis observar, en
  75. C++ se pueden definir variables en cualquier lugar del código (en este caso
  76. ha sido muy utilizado en el 'Γmainπ').
  77.   Luego hay un bucle 'Γforπ' infinito que terminará cuando se introduzca el
  78. comando "δquitπ" mediante un 'Γexitπ'. Se usa ahora (en el próximo número ya
  79. cambiará) variables globales para llevar todos los datos como en que sala
  80. se está, que se lleva encima, etc.
  81.   Viendo el código podriais preguntaros ¿porqué unas veces se accede a las
  82. funciones de las clases con un punto y otras con una flechita? No se si me
  83. explico, por ejemplo:
  84.  
  85. Γ    habitacion1.describe();π
  86. Γ    habitacion2->describe();π
  87.  
  88. La primera llamada se realiza cuando 'Γhabitacion1π' es un objeto, es decir,
  89. una instancia de una clase própiamente dicho; mientras la segunda llamada se
  90. hace cuando 'Γhabitacion2π' es un puntero a un objeto. Más claro, esas llamadas
  91. se harian cuando las habitaciones hubieran sido definidas de la siguiente
  92. forma:
  93.  
  94. Γ    Room habitacion1;π
  95. Γ    Room *habitacion2;π
  96.  
  97.  
  98.   Pues ya está todo este número, sólo queda compilar el ejemplo. Yo lo hice
  99. en δTurbo C/C++ v2.0π y para ello creé un proyecto que tambien se incluye.
  100. En el próximo número veremos más características del C++ que nos ayudaran en
  101. la programación de este tipo de juegos. Algunas de estas características
  102. seran la reutilización de código (mediante herencia), mejora en el manejo de
  103. cadenas (con sobrecarga de operadores), etc. A parte, tambien se limaran
  104. algunas asperezas como la pérdida de memória (que a veces se convierte en
  105. falta de ella) al tener guardados los objetos en arrays limitados en tamaño
  106. (usaremos listas).
  107.  
  108.                                    ∞Navi Dj.π
  109.